정규표현식 기초
NOTE
정규표현식의 메타문자(
* . ^ $ [] \ + |), 수량 반복({n},{n,m}), 문자 클래스, 플래그와 실전 예시(이메일·URL)를 정리한다.
📌 개념
TIP
자주 쓰는 패턴
{3}: 앞 문자 3개 반복{1,3}: 앞 문자 1~3개 반복[A-Za-z0-9]: 대문자 AZ / 소문자 az / 숫자 0~9 중 하나와 일치
정규표현식 사이트
regex101: build, test, and debug regex
기초 메타문자
-
- ⇒ *바로 앞에있는 문자 한개 이상 + 가능한 다른 문자들
- ex) 113* ⇒ 11 + 3… (한개이상) + 1232412…(가능한 다른 문자)
- ⇒ *바로 앞에있는 문자 한개 이상 + 가능한 다른 문자들
- . ⇒ 뉴라인을 제외한 오직 한 개의 글자와 일치
- ^ ⇒ 줄의 시작 or 문자 집합의 의미 반대
- $ ⇒ 줄끝
- ⇒ 문자들의 집합
- [xyz] : x,y,z 중 한 글자와 일치
- [c-n] : c에서 n 사이에 들어 있는 한 문자와 일치
- [B-Pk-y] : B에서 P까지 중이나 k에서 y까지 중의 한 글자와 일치
- [a-z0-9]: 소문자나 숫자 중의 한 문자와 일치
- [^b-d] : b와 d 사이의 문자를 제외한 모든 문자
- [0-9][0-9][a-z] : 0
9 1개, 09 1개, a-z 1개 로 표현됨 (ex_ 11z , 02h …)
- \ ⇒ 문자처럼 인식하게 해줌
- ex) $ ⇒ ” 그 자체로 인식
-
- : 하나 이상
- | : or
표현식
| 표현식 | 의미 |
|---|---|
| [xy] | 문자 선택을 표현하며 x 와 y 중에 하나를 의미한다. |
| [^xy] | not 을 표현하며 x 및 y 를 제외한 문자를 의미한다. |
| [x-z] | range를 표현하며 x ~ z 사이의 문자를 의미한다. |
| ^ | escape 를 표현하며 ^ 를 문자로 사용함을 의미한다. |
| \b | word boundary를 표현하며 문자와 공백사이의 문자를 의미한다. |
| \B | non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다. |
| \d | digit 를 표현하며 숫자를 의미한다. |
| \D | non digit 를 표현하며 숫자가 아닌 것을 의미한다. |
| \s | space 를 표현하며 공백 문자를 의미한다. |
| \S | non space를 표현하며 공백 문자가 아닌 것을 의미한다. |
| \t | tab 을 표현하며 탭 문자를 의미한다. |
| \v | vertical tab을 표현하며 수직 탭(?) 문자를 의미한다. |
| \w | word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. |
| \W | non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. |
| Flag | 의미 |
|---|---|
| g | Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다. |
| i | Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다. |
| m | Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다. |
예제
- ^ : 문자열의 처음을 나타냄
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| ^group | group으로 시작하는 문자열 | group, groups, group program, … |
- $ : 문자열의 끝을 나타냄
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| ing$ | ing로 끝나는 문자열 | ing, sing, hosting, booting, … |
| ^code$ | code로 시작하고 끝남 | code |
- . : 임의의 한문자를 나타냄
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| a.b | a와 b 사이에 한 문자가 낀 문자열 | aab, abb, acb, … |
| ab. | ab 다음에 한 문자가 붙은 문자열 | aba, abb, abc, … |
| a..b | a와 b 사이에 두 문자가 낀 문자열 | a11a, aabb, abbb, … |
| ^.ape | ape 앞에 한 문자가 낀 문자열로 시작함 | tape, caper, … |
-
- : 바로앞의 문자가 없거나 하나 이상이 있는 겅유
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| m*r | r 앞에 m이 없거나 하나 이상 있음 | r, mr, mmr, mmmr, … |
| mr*s | m 다음에 r이 없거나 하나 이상 있고 s가 맨 뒤에 있음 | ms, mrs, mrrs, mrrrs, … |
| mrs* | mr 다음에 s가 없거나 하나 이상 있음 | mr, mrs, mrss, mrsss, … |
-
- : 바로 앞의 문자가 하나 이상 있음
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| m+r | r 앞에 m이 하나 이상 있음 | mr, mmr, mmmr, … |
| mr+s | m 다음에 r이 하나 이상 있고 s가 맨 뒤에 있음 | mrs, mrrs, mrrrs, … |
| mrs+ | mr 다음에 s가 하나 이상 있음 | mrs, mrss, mrsss, … |
- ? : 앞의 문자가 없거나 하나임
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| m+r | r 앞에 m이 하나 이상 있음 | mr, mmr, mmmr, … |
| mr+s | m 다음에 r이 하나 이상 있고 s가 맨 뒤에 있음 | mrs, mrrs, mrrrs, … |
| mrs+ | mr 다음에 s가 하나 이상 있음 | mrs, mrss, mrsss, … |
- [] (꺽쇠묶음, 대괄호):
-
꺼꾀묶음은 한 문자를 가리킴
-
묶음안의 내용은 가리키는 문자의 범위를 나타냄
(문자 클래스로서 정규 표현식과는 언어가 다름)
- 특정한 문자열을 제외하려면 묶음안에 ’^‘를 사용
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| [w]s | s 앞에 w가 붙음 | ws |
| [ws]p | p 앞에 w나 s가 붙음 | wp, sp |
| [a-z]8 | 8 앞에 잔 로마자(소문자) 하나가 붙음 | a8, b8, c8, … , z8 |
| [a-zA-z][0-9] | 로마자 하나 뒤에 숫자 하나가 붙음 | a0, b5, K3, … |
| [^w]s | s 바로 앞에 w가 아닌 문자 하나가 붙음 | as, 2s, es, … |
| [^ws]p | p 바로 앞에 w나 s가 아닌 문자 하나가 붙음 | ap, hp, op, … |
| [^a-z]8 | 8 바로 앞에 잔 로마자가 아닌 문자 하나가 붙음 | A8, C8, 38, #8, … |
| ^[^gh][^ij]$ | g나 h가 아닌 한 문자로 시작하고 i나 j가 아닌 한 문자로 끝남(꺾쇠묶음 밖의 ^는 문자열의 처음을 나타냄) | ab, ty, ig, jh, … |
- { } : 중괄호
-
중괄호는 앞에 있는 문자의 개수를 나타냄
-
묶음안에서 ’ , ‘는 문자 개수의 범위를 나타낼때 씀
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| w{0}s | s 앞에 w가 없음 | s |
| w{1}s | s 앞에 w가 하나 붙음 | ws |
| ws{3}p | w가 앞에 오고 s가 셋 붙으면서 p가 뒤에 붙음 | wsssp |
| w{1,3}s | s 앞에 w가 1~3개 붙음 | ws, wws, wwws |
| w{,2}s | s 앞에 w가 두 개 이하 붙음 | s, ws, wws |
| w{2,}s | s 앞에 w가 두 개 이상 붙음 | wss, wsss, … |
- | : 또는 / or와 같은 선택문에 사용
| 식 | 뜻 | 맞는 문자열 |
|---|---|---|
| word | phrase | word 또는 phrase |
| mount(ed | ing) | mounted 또는 mounting |
| [^(a | b | c)].+ |
- (거꿀빗금) : 메터문자의 성분을 없앨때 사용
| 식 | 뜻 | 맞는 문자열 | 안 맞는 문자열 |
|---|---|---|---|
| ^[+] | 꺾쇠묶음으로 한 겹만 싸인 문자열 | [a], [ab], [abc], … | [], abcd, [a[]], … |
| [^.]+.(com | net) | com, net로 끝나는 바탕 도메인 이름(서브 도메인이 아닌 것) | a.com, b.net, … |
쉘 스크립트 - 문자열 : 정규표현식- 개요와 메타문자 (1)
💻 예시
이메일 정규표현식 (example@example.com)
^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$^[0-9a-zA-Z]: a-z, A-Z, 0-9 중 하나로 시작[-_\.]?:-,_,.중 하나가 있을 수도 없을 수도 있고([0-9a-zA-Z])*: a-z, A-Z, 0-9 가 0개 이상 존재@:@가 필수로 들어가고[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*: 앞부분과 동일한 도메인 규칙\.:.이 들어가며[a-zA-Z]{2,3}: a-z, A-Z 가 2개 또는 3개 존재 (최상위 도메인)$: 문자열 끝
URL 정규표현식
^(https?):\/\/([^:\/\s]+)^(https?):http또는https로 시작:\/\/:://가 포함되며([^:\/\s]+)::,/, 공백 이외의 문자가 한 개 이상(): 괄호 안의 정규표현식을 그룹으로 캡처\s: 공백 문자[^...]: 대괄호 안 문자를 제외한 문자^(...): 해당 패턴으로 시작